
/*  我们从编写一个响应信号的函数开始,
    该函数在参数sig中传递.
    这是我们安排在信号发生时调用的函数.
    我们打印一条消息,然后将SIGINT的信号处理重置为默认行为.
    让我们称这个函数为ouch.  */

/*  We'll start by writing the function which reacts to the signal
    which is passed in the parameter sig.
    This is the function we will arrange to be called when a signal occurs.
    We print a message, then reset the signal handling for SIGINT
    (by default generated by pressing CTRL-C) back to the default behavior.
    Let's call this function ouch.  */

// 引入信号处理头文件
#include <signal.h>
// 引入标准输入输出头文件
#include <stdio.h>
// 引入unistd头文件,用于提供对POSIX操作系统API的访问
#include <unistd.h>

// 定义信号处理函数ouch,当接收到SIGINT信号时会被调用
void ouch(int sig)
{
    // 打印接收到的信号值
    printf("OUCH! - 我收到了信号 %d\n", sig);
    // 将SIGINT信号的处理方式重置为默认处理方式
    (void)signal(SIGINT, SIG_DFL);
}

/*  主函数必须拦截SIGINT信号,当我们按下Ctrl-C时生成.
   其他时间,它只是在一个无限循环中等待,
   每秒打印一条消息.  */

/*  The main function has to intercept the SIGINT signal generated when we type Ctrl-C .
    For the rest of the time, it just sits in an infinite loop,
    printing a message once a second.  */

int main()
{
    // 使用signal函数注册信号处理函数ouch,当SIGINT信号发生时调用该函数
    (void)signal(SIGINT, ouch);

    // 无限循环打印"Hello World!"
    while (1)
    {
        // 打印"Hello World!"并换行
        printf("Hello World!\n");
        // 等待1秒
        sleep(1);
    }
}
